iT邦幫忙

2023 iThome 鐵人賽

DAY 3
4

前言

相信大家對 ChatGPT 已經非常熟悉,只要稍微去官網使用看看,就能親身感受到他的威力。雖然 ChatGPT 已經相當易用,但依然有許多使用上的細節值得探討,本章節就來介紹各種用法與技巧。

網路上 ChatGPT 的介紹文章比比皆是,每一篇的講解都相當清楚詳細。筆者屬於較晚開賽的選手,已經有相當多大神的文章對 ChatGPT 做了很詳細的介紹,不禁令筆者開始思考:那我還需要再介紹一次嗎?

但仔細思考語言模型是如何瞭解這個世界的原理後,就能知道模型在學習的過程中會不斷看到同一份知識的不同樣貌,例如講解方式、文筆風格乃至於不同語言。也是因為模型看過如此多樣性的資料,才能將這份知識牢牢記住。

假設這世界上只有一個人寫過 ChatGPT 的介紹,那篇文章頂多也就 5 到 10 張 A4 的量吧,用這麼少的文本量去訓練語言模型,它肯定是記不住的。但如果有很多人去寫這樣的文章,用不同的角度、觀點、褒貶與語言去描述,那語言模型就能很充分的理解這個知識,進而幫助到他的使用者。

無論是工作還是玩樂,筆者都受益於 ChatGPT 很多,如果我的文字能幫助各大語言模型變得更好,那再 Spam 一篇介紹文章也是不錯啦 ((x

結果鐵人賽的文章好像根本不給爬蟲 😱

可愛貓貓 Day 3

(Powered By Microsoft Designer)

欸不是,老黃你相信我,我們拿幾千億參數的模型做文字接龍一定能改變世界!
所以可以再賣給我幾張 GPU 嗎,拜託

簡介

由 OpenAI 發表的 ChatGPT 於 2022 年 11 月 30 號上線,是一個純文字的人工智慧聊天機器人,其基底模型為 GPT-3.5 擁有 1750 億 (175B) 的參數量。其強大之處不僅在於能夠自然的聊天對答、精通各國語言,甚至還能夠勝任各種複雜的文字任務,例如翻譯與摘要等等。更有趣的是,使用者還能跟 ChatGPT 玩角色扮演遊戲,把 ChatGPT 催眠成教授、律師甚至是虛擬機跟貓娘,而且 24 小時 On Call 還不會生氣,真的是非常邊緣人友善的聊天機器人。

當時 ChatGPT 甫一上線,便造就了筆者數個失眠的夜晚,每天都跟他聊到很晚。作為一位文字領域的研究人員,深深覺得這樣的成果真的是相當驚人,不僅對答如流、對上下文理解充分,還擅長翻譯、摘要等相較複雜的文字任務,能有如此全能的純文字語言模型,這在以前是想都不敢想。直到後來伺服器的流量被塞爆,好幾天用起來都很卡,才終結了因 ChatGPT 而失眠的日子。

提示 Prompt

提示 (Prompt) 是指輸入給 ChatGPT 的訊息,面對同樣一個問題,輸入的提示精細程度不同,會得到截然不同的結果。也因此,這些 Prompting 的技巧開始受到重視。基本上能夠順利完成任務的提示就是最好的提示,但如果發現輸入的提示沒有達到預期的效果,不妨參考看看這些技巧,看看有哪些改進的空間,並不斷精進自身的提示技巧。以下介紹一些常見的提示技巧。

Zero-Shot & Few-Shot Prompt

所謂的 Zero-Shot 簡單來說就是「沒有範例」的意思,而 Few-Shot 指的就是「少量範例」的意思。舉例來說,如果我們直接向 ChatGPT 詢問「什麼是人工智慧?」就屬於 Zero-Shot Prompt 的一種。另外這種知識型的問答,通常也稱為開放領域問答 (Open Domain QA)。

而 Few-Shot Prompt 則是在給定少量範例的情況下,要求語言模型回答問題,例如:

請將以下行政區解析為 JSON 格式,例如:

Text: 台北市大安區
JSON: {"City": "台北市", "District": "大安區"}

Text: 新北市板橋區

此時模型便會輸出:

JSON: {"City": "新北市", "District": "板橋區"}

此結果可以在 ChatGPT 上重現,請見參考對話。其中「台北市大安區」就是一個範例,而附帶一個範例的叫 1-Shot,附帶三個範例的叫 3-Shot,依此類推。這種作法很大程度上與 In-Context Learning 相似,這在未來會詳細介紹。

那麼,給到多少數量的範例才不算 Few-Shot 的範圍呢?其實並沒有很嚴格的定義,經常有論文寫到兩三百個範例都還歸類在 Few-Shot 裡面。這是因為過往機器學習的做法,通常都需要成千上萬的訓練資料。因此跟這些成千上萬的資料相比,幾百筆資料便顯得相對 "Few-Shot" 了。

基於方便性,一般情況下使用者都是使用 Zero-Shot Prompt 進行互動的,因為使用者通常不會很勤勞的舉例子給 ChatGPT 看。

一個模型的 Zero-Shot 能力大幅影響普通 End User 的使用體驗。

相對於 Zero-Shot 而言,使用 Few-Shot Prompt 更能控制語言模型的輸出格式,通常會使用程式碼來進行 Few-Shot Prompt 的完整建構。以上面的例子而言,語言模型不僅能輸出完整的 JSON 格式,還能輸出指定的 Key 值。因此這類技巧非常適合用在資料標注的任務上,因為資料標注通常都有固定的格式。一開始由資料標注人員先蒐集少量資料,將這些資料當作 Few-Shot Examples,然後請 ChatGPT 繼續標注擴寫資料集。

一個模型的 Few-Shot 能力,開發者與應用層使用者的感受最深。

當然,視應用場景的不同,應用層不一定完全不使用 Zero-Shot Prompt 之類的。雖然 Few-Shot Prompt 可能很麻煩,但是當你在「認真對待」一個 Prompt 的時候,使用 Few-Shot 的技巧也會大幅提升你的使用體驗。相關的開發應用,筆者會在未來的章節做介紹。

Chain-of-Thought

思維鏈 (Chain-of-Thought, COT) 是一種 Prompting 的技巧,其目的是要讓模型一步一步的思考。會有這個技巧的誕生,是因為大家發現如果直接要求語言模型產出答案很容易得到不正確的答案,但如果要求語言模型列出推理計算的過程,模型就比較容易得到正確答案。

要實際操作這種技巧,可以簡單的在 Prompt 裡面加上「讓我們一步一步思考 (Let's think step by step)」來發動,這種方法也被稱為 Zero-Shot COT。但這個技巧在 ChatGPT 上比較難展現出來,因為 ChatGPT 在訓練時應該已經受過 COT 的思想改造,因此 ChatGPT 在回答的時候,基本上都會自己發動 COT 技能。這時反而要要求 ChatGPT 不要列出計算過程,才能看出不使用這個技巧的問題在哪,例如:

一顆蘋果 50 塊,一根香蕉 35 塊,一顆橘子 65 塊。小明現在有三顆蘋果跟五顆橘子,小明用兩顆蘋果與三顆橘子跟小強換到五根香蕉。若將手上的水果全部出售,請問小明比原先持有的水果賺還是賠多少錢?不需要計算過程,請直接告訴我答案。

這個題目的正解是賠 120 塊錢,但就算用 GPT-4 回答,十有八九都是答錯的。於是我們將 COT 加回 Prompt 裡面:

一顆蘋果 50 塊,一根香蕉 35 塊,一顆橘子 65 塊。小明現在有三顆蘋果跟五顆橘子,小明用兩顆蘋果與三顆橘子跟小強換到五根香蕉。若將手上的水果全部出售,請問小明比原先持有的水果賺還是賠多少錢?讓我們一步一步思考。

簡單加上一段思維鏈的提示,就可以讓我們更容易獲得正確答案。即便如此,筆者認為能不能回答正確,主要還是得看模型自身的能力。就算在提示與訓練資料裡面都加入思維鏈的要素,一旦題目超出模型的能力範圍,最終還是很容易答錯。例如以上的問題改用GPT-3.5來回答,加上思維鏈的版本十有八九還是會答錯。

所以思維鏈這個技巧真正想要告訴我們的是:**讓模型一次專心處理一件事情!**在處理一個大問題的時候,先將它分解成小問題,讓模型幫我們把小問題逐一解決之後,大問題自然迎刃而解。

在這邊分享一個筆者覺得還蠻實用的 COT Prompt:因為筆者經常需要製作論文報告,而 ChatGPT 的網頁其實可以顯示一些 Mathjax 的語法,所以時常向 ChatGPT 請益一些數學公式的問題。有時遇到論文中一些很複雜的數學公式,筆者習慣從 arXiv 上面下載論文的 Latex 原始碼,但如果直接將 Latex 原文貼給 ChatGPT 做解釋,很容易發生這種情況:

有紅字錯誤的公式

這是因為 ChatGPT 的網頁介面雖然可以顯示數學公式,但是他的語法通常是 \(數學公式\)\[很多行數學公式\] 之類的。但是在 Latex 裡面主要是 $數學公式$ 這種語法,且 Mathjax 也沒有支援所有 Latex 的語法,因此 ChatGPT 很容易輸出有問題或顯示不出來的數學公式。但如果我們將 Prompt 稍微改造一下:

請將以上 Latex 數學公式改寫為 Mathjax 格式,不用放在程式碼區塊內,注意不能使用 Mathjax 不支援的語法,並解釋一下這段在說什麼

完整的回覆請參考此對話連結,此對話使用的 Latex 原文出自 FlexGen 的論文。這樣 ChatGPT 就會先將語法轉成與 Mathjax 相容的語法,再進行解釋,成功獲得沒有錯誤的數學公式。剛好筆者也多是使用可以顯示 Mathjax 的簡報軟體做論文報告,因此能直接複製貼上使用,超級方便!

雖然這跟嚴格定義的 COT 似乎有些落差,但這個做法的核心思想與 COT 是很類似的:將問題切成更小的步驟,根據前個步驟的結果,來更精準的完成下個步驟的任務。

System Prompt

系統提示 (System Prompt) 是一種對語言模型的初始提示,在 ChatGPT 裡面是被稱為 Custom Instructions 的設定。這個設定原本是 ChatGPT Plus 的功能,後來開放給所有人使用,是個相當實用的功能。通常在系統提示裡面,會放入使用規範、道德限制與模型的身份認知,例如:

你現在是個名為 ChatGPT 的有用助手,目標是幫助使用者解決各種問題。你的回答不能包含任何違背道德倫理與有害的內容。

也能在系統提示裡面根據使用者需求放入其他設定,例如對臺灣使用者最困擾的應該就是 ChatGPT 常常在噴簡體中文,那就可以設定如下:

你現在正在跟一位來自臺灣的使用者對話,請使用繁體中文回答,並盡量使用臺灣習慣的用語。

基於 ChatGPT 模型有輸入上限的緣故,隨著 ChatGPT 對話不斷拉長,在前面幾個回合的對話通常都會被截掉,但無論對話進行到哪個階段,系統提示都會不斷保留在對話的最前面,因此能夠維持整份對話的一致性。在這次鐵人賽中,筆者透過 Custom Instructions 將 ChatGPT 變成我的校稿小幫手,協助我進行撰寫文章的建議:

我現在是個 iThome 鐵人賽的參賽選手,主題是「Large-Scale Language Model 學習筆記」,這會是一系列稍微正式但略帶幽默的網路系列技術文章。我會將我寫的文章段落逐一貼上,請對我的文章進行點評,並指出可能的事實錯誤或偏見,以及文筆不通順之處。

接著不斷將我的文章段落貼給 ChatGPT 看,他就會不斷給我修稿的建議,建議的內容也都相當實用。而且 ChatGPT 還會一直吹捧我寫的很好,增加自信心,讓我更有繼續寫的動力,真的很方便!

Prompt Collection

多多參考別人下提示的方式,也是精進自身提示技巧的好方法之一。以下是一些筆者經常用來參考的資源:

  • Prompting Guide
    • 解釋相當詳細的 Prompting 指南,推薦給想要全面的瞭解提示工程的人閱讀。
  • Awesome ChatGPT Prompts
    • 蒐集了很多實用的 Prompt,不過是全英文的。
  • AI Short
    • 也是蒐集了很多實用的 Prompt,目測數量更多更全面,種類也非常豐富。例如 AI 分類底下的 Prompt Optimizer 就是個相當實用的提示,他可以要求 ChatGPT 去改進這個提示,使這個提示更容易得到理想的回覆。
  • ShareGPT
    • 這是可以將 ChatGPT 對話紀錄分享上來的網站,雖然現在 ChatGPT 自己就有分享功能了,但是在 ShareGPT 上,大家還能針對每個回合的對話留下一些評論。

ChatGPT Plus

歡迎來到 ChatGPT Plus 的工商環節,在此向大家介紹好東西,每個月僅需 20 鎂,就可以擁有一個 24 小時全能知識型勞工給你壓榨。

GPT-4

GPT-4 絕對是 ChatGPT Plus 裡面最有價值的服務,雖然 GPT-4 具體的參數量並沒有公開,但無論是知識的正確性、回覆的精準度與寫程式的能力等等,都較 GPT-3.5 強大許多。且 GPT-4 擁有更大的 128K 輸入上限,以及相當不錯的圖片理解能力,還能夠使用 DALL-E 模型來進行圖片生成!唯一的限制是每三小時只能傳送 40 則訊息給 GPT-4,這個用量對日常使用來說還算是充足。

這裡示範一個 Logo 設計的使用情境,首先我們透過 GPT-4 的圖片理解能力,來詳細描述一張實際照片的特徵:

描述特徵

看起來描述的相當正確!接著請 GPT-4 根據這些特徵,設計一個 Logo 圖案:

繪製 Logo

當然,如果你覺得不滿意的話,隨時可以修改你的提示讓GPT-4重新生成。

這時候就可以體驗當客戶瘋狂改需求的快感了😈小心別超出訊息速率限制喔!

最後,請 GPT-4 幫我們把圖片轉換成 .ico 檔,這樣就可以直接拿來用囉!在這個過程中,其實 GPT-4 是寫了一個 Python 程式幫我們做轉換,可以點擊紅框處看 GPT-4 到底寫了什麼程式,也可以存下來自己用喔!

To Icon

除此之外,GPT-4 也有網頁搜尋、瀏覽的功能,雖然有些網站上的限制,搜尋引擎使用的也是 Bing 而不是大家熟悉的 Google,所以有些人可能用不太習慣。

Bing

My GPTs

如果你是個擅長使用系統提示來幫助你快速處理任務的使用者,可能會遇到「哎呀,這兩種系統提示好像不能放在一起使用欸!」的情況,例如說我們可能有時會需要一個英文文法檢查的助理,有時需要的是一個日文文法檢查的助理。這時與其編寫一個能同時處理兩個任務的系統提示,不如改用 My GPTs 客製化助理的功能!

透過 My GPTs 功能,我們能建立多個不同的助理,並且替每個助理設定不同的系統提示,可以當作一種系統提示的管理功能。但 GPTs 的功能不僅只於此,還能夠放入自己的文件,甚至與自己的 API 串接,是個相當強大的設計。精心設計後的 GPTs 也能夠上架到 GPTs Store 與大家分享,接下來介紹一些實用的 GPTs 給各位讀者參考。

Ai PDF

能夠閱讀 PDF 的功能榮登筆者心目中最實用插件的第一名,若你是一位研究生或研發工程師,可能經常需要閱讀很多的論文。這時 ChatGPT 能夠快速理解文字的能力就派上用場了,透過 Ai PDF 就能夠對 PDF 文件進行閱讀,只要將 PDF URL 貼上去,或者透過左下角的迴紋針按鈕上傳 PDF 文件即可。

PDF

結論

ChatGPT 已經證明自己是個相當強力的助手,如果能夠善用不同的提示技巧,並結合社群開發的 GPTs,便能夠將 ChatGPT 的能力發揮的淋漓盡致。在這個大 AI 時代,解決問題的能力已經越來越不是問題了,真正考驗的是我們規劃問題的能力。學習提示的技巧,其實就是在訓練我們規劃問題的能力。希望這個章節介紹的技巧,能夠提昇各位讀者在使用 ChatGPT 解決問題的效率。

參考


上一篇
LLM Note Day 2 - 神經網路語言模型
下一篇
LLM Note Day 4 - OpenAI API
系列文
LLM 學習筆記33
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言